/*设置
 * zhangrui	
 * 2016-02-23
 */
document.addEventListener('plusready',function(){
	plus.runtime.getProperty(plus.runtime.appid, function(inf) {
		curVer = inf.version;
		plus.storage.setItem('curVer',curVer);
	});
	$('#toastBtn').on('click',function(){
		initUpdate();   
	})
},false); 
 


/** 
 * 检查更新 
 */  
	var server = webRoot+'/api/Public/update/update.json', //获取升级描述文件服务器地址
	localDir = "update",
	localFile = "update.json", //本地保存升级描述目录和文件名
//	keyUpdate = "updateCheck", //取消升级键名
//	keyAbort = "updateAbort", //忽略版本键名
//	checkInterval = 0, //升级检查间隔，单位为ms,7天为7*24*60*60*1000=604800000, 如果每次启动需要检查设置值为0
	dir = null;
  
	/**
	 * 准备升级操作
	 * 创建升级文件保存目录
	 */
	function initUpdate() {
		// 打开doc根目录
		plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
			fs.root.getDirectory(localDir, {create: true}, function(entry) {
				dir = entry;
				checkUpdate();
			}, function(e) {
				console.log("准备升级操作，打开update目录失败：" + e.message);
			});
		}, function(e) {
			console.log("准备升级操作，打开doc目录失败：" + e.message);
		});
	}
	/**
	 * 检测程序升级
	 */
	function checkUpdate() {
		// 读取本地升级文件
		dir.getFile(localFile, {create: false}, function(fentry) {
			fentry.file(function(file) {
				var reader = new plus.io.FileReader();
				reader.onloadend = function(e) {
					fentry.remove();
					var data = null;
					try {
						data = JSON.parse(e.target.result);
					} catch (e) {
						console.log("读取本地升级文件，数据格式错误！");
						return;
					}
					checkUpdateData(data);
				}
				reader.readAsText(file);
			}, function(e) {
				console.log("读取本地升级文件，获取文件对象失败：" + e.message);
				fentry.remove();
			});
		}, function(e) {
			//			$.each(e, function(k,v) {
			//				console.log(k+','+v)
			//			});
			// 失败表示文件不存在，从服务器获取升级数据
			getUpdateData();  
			checkUpdate();
		});
	}
	/**
	 * 从服务器获取升级数据
	 */
	function getUpdateData() {
		var xhr = new plus.net.XMLHttpRequest();
		xhr.onreadystatechange = function() {
			switch (xhr.readyState) {
				case 4:
					if (xhr.status == 200) {
						// 保存到本地文件中
						dir.getFile(localFile, {create: true}, function(fentry) {
							fentry.createWriter(function(writer) {
								writer.onerror = function() {
									console.log("获取升级数据，保存文件失败！");
								}
								writer.write(xhr.responseText);
							}, function(e) {
								console.log("获取升级数据，创建写文件对象失败：" + e.message);
							});
						}, function(e) {
							console.log("获取升级数据，打开保存文件失败：" + e.message);
						});
					} else {
						console.log("获取升级数据，联网请求失败：" + xhr.status);
					}
					break;
				default:
					break;
			}
		}
		xhr.open("GET", server);
		xhr.send();
	} 
	/** 
	 * 检查升级数据
	 */
	
	function checkUpdateData(j) {
        var curVer = plus.storage.getItem('curVer');
		var inf = j[plus.os.name];
		if (inf) {
			var srvVer = inf.version;
			// 判断是否需要升级
			if (compareVersion(curVer, srvVer)) {
				// 提示用户是否升级
				plus.nativeUI.confirm(inf.note, function(i) {
					if (0 == i.index) {
						plus.runtime.openURL(inf.url);
					}
				}, inf.title, ["立即更新", "取消"]);
			}else{
				plus.ui.toast("已是最新版本",{duration:"short"});
			}
		}
	}
	/**
	 * 比较版本大小，如果新版本nv大于旧版本ov则返回true，否则返回false
	 * @param {String} ov
	 * @param {String} nv
	 * @return {Boolean} 
	 */
	function compareVersion(ov, nv) {
		if (!ov || !nv || ov == "" || nv == "") {
			return false;
		}
		var b = false,
			ova = ov.split(".", 4),
			nva = nv.split(".", 4);
		for (var i = 0; i < ova.length && i < nva.length; i++) {
			var so = ova[i],
				no = parseInt(so),
				sn = nva[i],
				nn = parseInt(sn);
			if (nn > no || sn.length > so.length) {
				return true;
			} else if (nn <= no) {
				return false;
			}
		}
		if (nva.length > ova.length && 0 == nv.indexOf(ov)) {
			return true;
		}
	}
